www.gusucode.com > VC++下的串行数据通信以及八个串口编程实例- > VC++下的串行数据通信以及八个串口编程实例-/第7章 智能安防报警系统/SetPara3Dlg.cpp

    // SetPara3Dlg.cpp : implementation file
//

#include "stdafx.h"
#include "Alert.h"
#include "SetPara3Dlg.h"
#include "SetPara2Dlg.h"


#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CSetPara3Dlg dialog


CSetPara3Dlg::CSetPara3Dlg(CWnd* pParent /*=NULL*/)
	: CDialog(CSetPara3Dlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CSetPara3Dlg)
	//}}AFX_DATA_INIT
}


void CSetPara3Dlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CSetPara3Dlg)
	DDX_Control(pDX, IDC_LIST3, m_cjList);
	DDX_Control(pDX, IDC_LIST2, m_dcjList);
	DDX_Control(pDX, IDC_LIST1, m_bfList);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CSetPara3Dlg, CDialog)
	//{{AFX_MSG_MAP(CSetPara3Dlg)
	ON_BN_CLICKED(IDPREV, OnPrev)
	ON_BN_CLICKED(IDFINISH, OnFinish)
	ON_LBN_SELCHANGE(IDC_LIST1, OnSelchangeList1)
	ON_BN_CLICKED(IDC_CHECKIN, OnCheckin)
	ON_BN_CLICKED(IDC_CHECKOUT, OnCheckout)
	ON_LBN_DBLCLK(IDC_LIST3, OnDblclkList3)
	ON_LBN_DBLCLK(IDC_LIST2, OnDblclkList2)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSetPara3Dlg message handlers

void CSetPara3Dlg::OnPrev() 
{
	// TODO: Add your control notification handler code here
	CDialog::OnOK();
	CSetPara2Dlg* pStep1= (CSetPara2Dlg*)GetParent();
	pStep1->ShowWindow(SW_SHOW);
}

void CSetPara3Dlg::OnFinish() 
{
	// TODO: Add your control notification handler code here
	CDialog::OnOK();
	
	CSetPara2Dlg* pStep2= (CSetPara2Dlg*)GetParent();
	::SendMessage(pStep2->m_hWnd,WM_CLOSE,0,0);	
}

BOOL CSetPara3Dlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	//显示和提取数据
	_RecordsetPtr r;
	r.CreateInstance(_uuidof(Recordset));	//显示布防名称
	CString s="select bfname from bufangset";	
	_bstr_t bs=s.AllocSysString();
	CAlertApp* pApp=(CAlertApp*)::AfxGetApp();
	r->Open(bs,(IDispatch*)pApp->m_pConnection,adOpenStatic,adLockOptimistic,adCmdText);
	if(r->adoEOF || r->BOF)
		goto excep1;
	r->MoveFirst();
	while(!r->adoEOF)
	{
		m_bfList.AddString(LPTSTR(_bstr_t(r->GetCollect("bfname"))));
		r->MoveNext();
	}
excep1:
	r->Close();
	r=NULL;

	r.CreateInstance(_uuidof(Recordset));	//显示处警名称
	s="select cjname from chujingset";
	bs=s.AllocSysString();
	r->Open(bs,(IDispatch*)pApp->m_pConnection,adOpenStatic,adLockOptimistic,adCmdText);
	if(r->adoEOF || r->BOF)
		goto excep2;
	r->MoveFirst();
	while(!r->adoEOF)
	{
		m_cjList.AddString(LPTSTR(_bstr_t(r->GetCollect("cjname"))));
		r->MoveNext();
	}
excep2:
	r->Close();
	r=NULL;

	//提取数据
	m_dcjStrArray.SetSize(m_bfList.GetCount()+1);
	for(int i=0;i<m_bfList.GetCount();i++)
	{
		r.CreateInstance(_uuidof(Recordset));
		CString temp;
		m_bfList.GetText(i,temp);
		s="select cjname from bftocj where bfname='" + temp + "'";
		bs=s.AllocSysString();
		r->Open(bs,(IDispatch*)pApp->m_pConnection,adOpenStatic,adLockOptimistic,adCmdText);
		if(!r->adoEOF && !r->BOF)
			m_dcjStrArray[i]=LPTSTR(_bstr_t(r->GetCollect("cjname")));
		r->Close();
		r=NULL;
	}
	m_bfList.SetCurSel(0);	
	m_cjList.SetCurSel(0);
	OnSelchangeList1();
	m_dcjList.SetSel(0);
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}


void CSetPara3Dlg::OnSelchangeList1() 
{
	// TODO: Add your control notification handler code here
	int nSel=m_bfList.GetCurSel();
	if(nSel==-1) return;
	int count=analystRs(m_dcjStrArray[nSel]);
	while(m_dcjList.GetCount()>0)
	{
		m_dcjList.DeleteString(0);
	}
	for(int i=0;i<count;i++)
		m_dcjList.AddString(strcj[i]);
	m_dcjList.SetSel(0);
}

int CSetPara3Dlg::analystRs(CString cjname)
{
	int count=0;	//count:纪录获取的字符串个数
	strcj.RemoveAll();
	strcj.Add("");
	for(int i=0;i<cjname.GetLength();i++)
	{
		if(cjname[i]!='@')
			strcj[count]+=cjname[i];
		else
		{
			count+=1;
			strcj.Add("");
		}
	}
	if(strcj[count]=="")
	{
		strcj.RemoveAt(count);
		count--;
	}
	return count+1;
}

void CSetPara3Dlg::OnCheckin() 
{
	// TODO: Add your control notification handler code here
	if(m_bfList.GetCurSel()==-1)
		return;
	for(int i=0;i<m_cjList.GetCount();i++)
	{
		if(m_cjList.GetSel(i))
		{
			CString cjname;
			m_cjList.GetText(i,cjname);
			for(int j=0;j<m_dcjList.GetCount();j++)
			{
				CString dcjname;
				m_dcjList.GetText(j,dcjname);
				if(cjname==dcjname)
					break;
			}
			if(j==m_dcjList.GetCount())
			{
				m_dcjList.AddString(cjname);
				if(m_dcjStrArray[m_bfList.GetCurSel()].Right(1)=="@")
					m_dcjStrArray[m_bfList.GetCurSel()]+=cjname;
				else
					m_dcjStrArray[m_bfList.GetCurSel()]+=("@"+cjname);
			}
		}
	}
	RefreshRelation();	//写入设置
}


void CSetPara3Dlg::OnCheckout() 
{
	// TODO: Add your control notification handler code here
	if(m_bfList.GetCurSel()==-1)
		return;
	for(int i=m_dcjList.GetCount()-1;i>=0;i--)
	{
		if(m_dcjList.GetSel(i))
			m_dcjList.DeleteString(i);
	}
	if(m_bfList.GetCurSel()==-1)
		return;
	CString dcjname;
	m_dcjStrArray[m_bfList.GetCurSel()]="";
	for(i=0; i<m_dcjList.GetCount();i++)
	{
		m_dcjList.GetText(i,dcjname);
		if(i==0)
			m_dcjStrArray[m_bfList.GetCurSel()]=dcjname;
		else
			m_dcjStrArray[m_bfList.GetCurSel()]+=("@"+dcjname);
	}
	RefreshRelation();
}

void CSetPara3Dlg::OnDblclkList3() 
{
	// TODO: Add your control notification handler code here
	OnCheckin();
}

void CSetPara3Dlg::OnDblclkList2() 
{
	// TODO: Add your control notification handler code here
	OnCheckout();
}

void CSetPara3Dlg::RefreshRelation()
{
	if(m_bfList.GetCurSel()==-1)
		return;

	CString bfname;
	m_bfList.GetText(m_bfList.GetCurSel(),bfname);

	_RecordsetPtr r;
	r.CreateInstance(_uuidof(Recordset));	
	CString s="select * from bftocj where bfname ='" + bfname + "'";
	_bstr_t bs=s.AllocSysString();
	CAlertApp* pApp=(CAlertApp*)::AfxGetApp();
	r->Open(bs,(IDispatch*)pApp->m_pConnection,adOpenStatic,adLockOptimistic,adCmdText);
	if(!r->adoEOF && !r->BOF)
	{
		if(m_dcjStrArray[m_bfList.GetCurSel()]=="")
			r->Delete(adAffectCurrent);
		else
			r->PutCollect("cjname",m_dcjStrArray[m_bfList.GetCurSel()].AllocSysString());
		r->Update();
	}
	else
	{
		r->AddNew();
		r->PutCollect("bfname",bfname.AllocSysString());
		r->PutCollect("cjname",m_dcjStrArray[m_bfList.GetCurSel()].AllocSysString());
		r->Update();
	}
	r->Close();
	r=NULL;
}